﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace In_Game
{
    class Animacao
    {
        public Texture2D textura;
        public Vector2 posicao;
        public float escala;

        public float tempoDecorrido; // Tempo decorrido durante a naimaçao
        public Point posicaoInicial;  // posiçao inicial da animaçao na folha
        public float tempoFrame;
        public int framePorSegundo;   // quantidade de frames por segundo qua a animacao irá rodar
        public Point frameAtual;      // frame que a animaçao se encontra
        public int larguraFrame;      // largura do frame
        public int alturaFrame;       // altura do frame
        public int quantidadeFrame;   // quantidade de frames que a animaçao possui
        public Color cor;             // cor da figura

        public bool ativo;            // condiçao para a animaçao acontecer
        public bool loop;             // condiçao para a animaçao continuar rodando quando terminar a folha

        public Animacao(Texture2D textura, Vector2 posicao, Point posicaoInicial, int larguraFrame, int alturaFrame, int quantidadeFrame,
            int framePorSegundo, Color cor, float escala, bool loop, bool ativo)
        {
            this.textura = textura;
            this.posicao = posicao;
            this.posicaoInicial = posicaoInicial;
            this.larguraFrame = larguraFrame;
            this.alturaFrame = alturaFrame;
            this.quantidadeFrame = quantidadeFrame;
            this.framePorSegundo = framePorSegundo;
            this.cor = cor;
            this.escala = escala;
            this.loop = loop;
            this.ativo = ativo;

            tempoDecorrido = 0;

            frameAtual = new Point(0, 0);
            tempoFrame = 1 / (float)framePorSegundo;
            
        }

        public void Update(GameTime gameTime)
        {

            

            if (ativo)
            {
                tempoDecorrido += (float)gameTime.ElapsedGameTime.TotalSeconds;
                if (tempoDecorrido > tempoFrame)
                {
                    tempoDecorrido = 0;
                    frameAtual.X++;

                    if (frameAtual.X == quantidadeFrame)
                    {
                        frameAtual.X = 0;

                        if (loop == false)
                        {
                            ativo = false;
                            //frameAtual.X = 0;
                        }

                    }


                }
            }

        }

        public void Draw(SpriteBatch spriteBatch)
        {
            if (ativo)
            { spriteBatch.Draw(textura, posicao, new Rectangle(posicaoInicial.X + (frameAtual.X * larguraFrame), posicaoInicial.Y + (frameAtual.Y * alturaFrame), larguraFrame, alturaFrame), cor, 0, Vector2.Zero, escala, SpriteEffects.None, 0); }
        }
    }
}
